/**
 * 
 * Javascript de eventos
 * DOM Ready
 * @author Joan Muñoz
 * 
 */
jQuery(function(){
  Eventos.init();
});


/**
 * 
 * Clase
 * @author Joan Muñoz
 * 
 */
var Eventos = new (function(){
  
  this.image_default = 'images/eventos/default.jpeg';
  this.images_folder = '../img/uploads/events/202x95/';
  
   /**
   * 
   * Iniciliza el módulo
   * @author Joan Muñoz
   * 
   */
  this.init = function() {
    // Form
    $('#frm_insert').css({
      position : 'static',
      visibility : 'visible',
      display : 'none'
    });
    
    // Inicializa el datepicker  
    this.initDates();
  
    // TinyMCE
    tinyMCE.init({
   // General options
      mode : "textareas",
      theme : "advanced",
      plugins : "pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",

      // Theme options
      theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|fontselect,fontsizeselect",
      theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,cleanup,code,|,forecolor,backcolor",
      theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup",
      theme_advanced_buttons4 : "pagebreak",
      theme_advanced_toolbar_location : "top",
      theme_advanced_toolbar_align : "left",
      theme_advanced_statusbar_location : "bottom",
      theme_advanced_resizing : false,
      width : 655
    });
    
    // Obtiene las sedes y las muestra en el formulario
    this.getPlaces();
    
    // Acciones de los botones
    $('#btn_add_event').on('click', this.showForm);
    $('#btn_cancel').on('click', this.hideForm);
    $('#btn_save').on('click', this.validate);
    $('#add_date_btn').on('click', this.addDate);
    $('#sede_cmb').on('change', this.getPlaces);
    
    
    // Oculta el alert
    $('.alert').hide();
    
    // incia las acciones de los botones de la tabla
    this.initEventsRowsActions();
    
  }; // end of init()
  
  /**
   * 
   * Inicializa las fechas
   * @author Joan Muñoz
   * 
   */
  this.initDates = function() {
    // Datepicker
    $(".datepicker").datepicker('destroy');
    $(".datepicker").datepicker({
        dateFormat: 'yy-mm-dd'
    });
    
  };
  
  /**
   * 
   * Mostrar el formulario
   * @author Joan Muñoz
   * 
   */
  this.showForm = function(e) { $('#frm_insert').slideDown(); };
  
  /**
   * 
   * Oculta el formulario
   * @author Joan Muñoz
   * 
   */
  this.hideForm = function(e) {
    
    $('.control-group').removeClass('error');
    $('.control-group').find('.help-inline').hide();
    $('#frm_insert')[0].reset();
    $('#evento_id').val('');// Inicializa la variable de evento_id
    Eventos.getPlaces(); // Inicializa los lugares
    $('#frm_insert').slideUp();
    
    // Elimina todas fechas creadas
    $('.date_container').remove();
    
    // Inicializa la imagen por default
    $('#image_event').attr('src', Eventos.image_default);
    Eventos.reloadImg( $('#image_event') );
    
    // Fix para que no intente hacer submit
    return false;
  };
  
  /**
   * 
   * Agrega una nueva fecha al formulario
   * @author Joan Muñoz
   * 
   */
  this.addDate = function(e) {
    var tr = $(this).parentsUntil('tr').parent();
    var first_td = tr.find('td:eq(0)');
    var second_td = tr.find('td:eq(1)');
    
    // Crea el input de la fecha
    var html = '<div class="date_container">';
    html += '<input type="text" name="fecha[]" value="" class="datepicker span5" />';
    html += '<div class="help-inline">Por favor llene este campo.</div>';
    html += '</div>';
    first_td.append(html);
    
    // Crea los input de las horas
    html = '<div class="date_container">';
    html += '<input type="text" name="hora[]" value="00" class="span2 hour" /> <span class="two_points">:</span> ';
    html += '<input type="text" name="minutos[]" value="00" class="span2 minute" />';
    html += '&nbsp;<a class="delete delete_date" href="javascript:void(0);" data-original-title="Borrar Fecha"></a>';
    html += '<div class="help-inline">Por favor llene este campo.</div><br />';
    html += '</div>';
    second_td.append(html);
    
    // Reinicia los datepickers
    Eventos.initDates();
    
    // Inicializa las acciones del botón cerrar
    $('a.delete').tooltip({ title : 'Eliminar.' });
    $('a.delete_date').off('click').on('click', Eventos.deleteDate);
  };
  
  /**
   * 
   * Elimina la fecha del formulario
   * @author Joan Muñoz
   */
  this.deleteDate = function(e) {
    var container = $(this).parent();
    var tr = $(this).parentsUntil('tr').parent();
    var first_td = tr.find('td:eq(0)');
    var second_td = tr.find('td:eq(1)');
    var pos = 0;
    
    // Obtiene en que posición está la fecha que se quiere eliminar
    $.each(second_td.find('.date_container'), function(index) {
      if ($(this)[0] === container[0]) { pos = index; }
    });
    
    
    // Elimana los campos
    $(this).tooltip('hide');
    first_td.find('.date_container').eq(pos).remove();
    second_td.find('.date_container').eq(pos).remove();
  };
  
  /**
   * 
   * Trae los localidades de la base de datos
   * @param int sede_id => El id de la sede a traer sus localidades si está
   * vacía trae las localidades del primer
   * @author Joan Muñoz
   */
  this.getPlaces = function(e) {
    sede_id = $('#sede_cmb option:selected').val();
    
    $.ajax({
      type : 'POST',
      url : 'eventos/actions.php?action=getplaces',
      data : { sede_id : sede_id },
      dataType : 'json',
      success : function(Data) {
        if (Data.error == true) {
          alert('Ocurrio el siguiente error: ' + Data.message);
        } else {
          Eventos.createPlaces( Data.localidades );
        }
      }
    }); // end of AJAX
  };
  
  /**
   * 
   * Crea la tabla de locaciones en el HTML
   * @param array Data => el arreglo que contiene los datos a poner en la tabla
   * @author Joan Muñoz
   * 
   */
  this.createPlaces = function(Data) {
    var html = '<table class="clear table-bordered table-striped">';
    html += '<tr>';
    html += '<th>Localidades:</th>';
    html += '<th>Precios:</th>';
    html += '</tr>';
    
    for (x in Data.id) {
      html += '<tr>';
      html += '<td>'+ Data.nombre[x] +':</td>';
      html += '<td class="control-group">';
      html += '<input type="hidden" name="localidades[]" value="'+ Data.nombre[x] +'" />';
      html += '$ <input type="text" name="precio[]" value="'+ Data.costo[x] +'" class="span2" />';
      html += '<span class="help-inline">Por favor llene este campo.</span>';
      html += '</td>';
      html += '</tr>';  
    }
    
    html += '</table>';
    
    $('#loalicades_table').html( html );
  };
  
  /**
   * 
   * Valida el formulario antes de enviarlo
   * @author Joan Muñoz
   * 
   */
  this.validate = function(e) {
    var error = false;
    
    if ( $.trim( $('#programa_input').val() ) == '' ) {
      $('#programa_input').parent().addClass('error');
      $('#programa_input').nextUntil('help-inline').show();
      error = true;
    }
    if ( $.trim( $('#programa_input_en').val() ) == '' ) {
      $('#programa_input_en').parent().addClass('error');
      $('#programa_input_en').nextUntil('help-inline').show();
      error = true;
    }
    if ( $.trim( $('#titulo_input').val() ) == '' ) {
      $('#titulo_input').parent().addClass('error');
      $('#titulo_input').nextUntil('help-inline').show();
      error = true;
    }
    if ( $.trim( $('#titulo_input_en').val() ) == '' ) {
      $('#titulo_input_en').parent().addClass('error');
      $('#titulo_input_en').nextUntil('help-inline').show();
      error = true;
    }
    $.each($('.datepicker'), function(index) {
      if ( $.trim( $(this).val() ) == '' ) {
        $(this).parentsUntil('.control-group').parent().addClass('error');
        $(this).nextUntil('help-inline').show();
        error = true;
      }
    });
    $.each($('.hour'), function(index) {
      if ( $.trim( $(this).val() ) == '' ) {
        $(this).parentsUntil('.control-group').parent().addClass('error');
        $(this).nextUntil('help-inline').show();
        error = true;
      }
    });
    $.each($('.minute'), function(index) {
      if ( $.trim( $(this).val() ) == '' ) {
        $(this).parentsUntil('.control-group').parent().addClass('error');
        $(this).nextUntil('help-inline').show();
        error = true;
      }
    });
    
    if( error ) {
      return false;
    } else {
      Eventos.saveNewEvent(); // Guarda el evento
    }
  };
  
  /**
   * 
   * Guarda un nuevo evento
   * @author Joan Muñoz
   * 
   */
  this.saveNewEvent = function() {
    Admin.showLoading(true); // Muestra el mensaje de cargando
    $('#frm_insert').submit(); 
  };
  
  /**
   * 
   * Muestra el mensaje arrojado desde un iframe
   * @param JSON Data => Objeto que contiene si hubo error y el mensaje
   * @author Joan Muñoz
   * 
   */
  this.showIframeMessage = function(Data) {
    Admin.showLoading(false); // Oculta el mensaje de cargando
    
    if (Data.error === true) {
      $('.alert').removeClass('alert-success');
      $('.alert').addClass('alert-error');
    } else {
      $('.alert').removeClass('alert-error');
      $('.alert').addClass('alert-success');
    }
    
    $('.alert_message').html( Data.message );
    $('.alert').show();
    
    // Cierra el formulario
    if (Data.error === false) { this.hideForm(); }
    
    // Sí existe el callback
    if ( Data.callback != null ) {
      eval('var callback = this.'+ Data.callback);
      callback( Data.arguments );
    }
  };
  
  /**
   * 
   * Crea un nuevo row en la tabla de eventos
   * @param JSON Data => Objecto con los argumentos
   * @author Joan Muñoz
   * 
   */
  this.createEventRow = function(Data) {
    var html = '<tr>';
    html += '<th>#</th>';
    html += '<th>Programa</th>';
    html += '<th>Título</th>';
    html += '<th>Fechas</th>';
    html += '<th>Estado</th>';
    html += '<th>Opciones</th>';
    html += '</tr>';
    html += '<tr>';
    html += '<td>'+ Data.id +'</td>';
    html += '<td>'+ Data.programa +'</td>';
    html += '<td>'+ Data.titulo +'</td>';
    html += '<td>';
    for ( x in Data.fechas ) {
      html += Data.fechas[x]+' / ';  
    }
    
    if (Data.estado == 'n') {
      label = 'label-success';
      tag = 'Nuevo';
    } else {
      label = 'label-important';
      tag = 'Consumado';
    }
    html += '</td>';
    html += '<td>';
    html += '<span class="label '+ label +'">'+ tag +'</span></td>';
    html += '<td>';
    html += '<a href="'+ Data.id +'" class="edit edit_event"></a>';
    html += '<a href="'+ Data.id +'" class="delete delete_event"></a>';
    html += '<a href="#" class="comments"></a>';
    html += '</td>';
    html += '</tr>';
    
    // Agrega el evento
    $('#table_events tr:first-child').remove();
    $('#table_events').prepend( html );
    
    $('a.edit').tooltip({ title : 'Editar.' });
    $('a.delete').tooltip({ title : 'Eliminar.' });
    $('a.comments').tooltip({ title : 'Ver Comentarios.' });
    
    // Inicializa las acciones de los botones de la tabla
    Eventos.initEventsRowsActions();
  };
  
  
  /**
   * 
   * Edita un row en la tabla de eventos
   * @param JSON Data => Objecto con los argumentos
   * @author Joan Muñoz
   * 
   */
  this.editEventRow = function(Data) {
    var row = $('.edit_event[href="'+ Data.id +'"]').parentsUntil('tr').parent();
    row.find('td:eq(1)').html( Data.programa );
    row.find('td:eq(2)').html( Data.titulo );
    
    // Fechas
    var dates = '';
    for ( x in Data.fechas ) {
      dates += Data.fechas[x]+' / ';  
    }
    
    row.find('td:eq(3)').html( dates );
    
    // Status
    if (Data.estado == 'n') {
      label = 'label-success';
      tag = 'Nuevo';
    } else {
      label = 'label-important';
      tag = 'Consumado';
    }
    
    row.find('td:eq(4)').html('<span class="label '+ label +'">'+ tag +'</span>');
  };
  
  /**
   * 
   * Inicializa las acciones de los botones de la tabla
   * @author Joan Muñoz
   * 
   */
  this.initEventsRowsActions = function() {
    $('.delete_event').off('click').on('click', this.deleteEvent);
    $('.edit_event').off('click').on('click', this.fillEventForm);
  };
  
  /**
   * 
   * Elimina un evento
   * @param e EventObject
   * @author Joan Muñoz
   * 
   */
  this.deleteEvent = function(e) {
    e.preventDefault();
    
    var id = $(this).attr('href');
    var tr = $(this).parentsUntil('tr').parent();
    var question = '¿Está seguro de eliminar este evento? '; 
    
    if ( confirm(question) ) {
      $.ajax({
        type : 'POST',
        url : 'eventos/actions.php?action=deleteevent',
        data : { id : id },
        dataType : 'json',
        success : function(Data) {
          if (Data.error == true) {
            alert('Ocurrio el siguiente error: ' + Data.message);
          } else {
            $('.alert_message').html( Data.message );
            $('.alert').addClass('alert-success').removeClass('alert-error');
            $('.alert').show();
            tr.remove();
          }
        }
      }); // end of AJAX
    } // if confirm
    
  };
  
  /**
   * 
   * LLena el formulario de eventos para poder ser editado el evento.
   * @param e eventObject
   * @author Joan Muñoz
   * 
   */
  this.fillEventForm = function(e) {
    e.preventDefault();
    
    var id = $(this).attr('href');
    
    $.ajax({
      type : 'POST',
      url : 'eventos/actions.php?action=getevent',
      data : { id : id },
      dataType : 'json',
      success : function(Data) {
        if (Data.error == true) {
          alert('Ocurrio el siguiente error: ' + Data.message);
        } else {
          $('#evento_id').val( Data.evento.id );
          $('#programa_input').val( Data.evento.programa );
          $('#programa_input_en').val( Data.evento.programa_en );
          $('#titulo_input').val( Data.evento.titulo );
          $('#titulo_input_en').val( Data.evento.titulo_en );
          $('#sede_cmb').val( Data.evento.sede_id );
          tinyMCE.get('desc_textarea').setContent( Data.evento.descripcion );
          tinyMCE.get('desc_textarea_en').setContent( Data.evento.descripcion_en );
          $('#estado_cmb').val( Data.evento.estado );
          
          // Reemplaza la imagen
          $('#image_event').attr('src', 
              Eventos.images_folder + Data.evento.id + '.jpg');
          Eventos.reloadImg( $('#image_event') );
          
          // LLena las locallidades
          Eventos.createPlaces( Data.localidades );
          
          // LLena las fechas
          Eventos.fillEventDates( Data.fechas );
          
          Eventos.showForm();
        }
      }
    }); // End Ajax
    
  };
  
  /**
   * 
   * Llena las fechas 
   * @param e eventObject
   * @author Joan Muñoz
   * 
   */
  this.fillEventDates = function(dates) {
    for (x in dates.id) {
      if (x > 0) { $('#add_date_btn').click(); }
      
      $('.datepicker').eq(x).val( dates.fecha[x] );
      $('.hour').eq(x).val( dates.hora[x] );
      $('.minute').eq(x).val( dates.minuto[x] );
    }
  };
  
  /**
   * 
   * Recarga una imagen
   * @param e => La iagen a recargar
   * @author Joan Muñoz
   * 
   */
  this.reloadImg = function(e) {
    var obj = e[0]; // Lo convierte a javascript nativo
    var src = obj.src;
    var pos = src.indexOf('?');
    if (pos >= 0) {
      src = src.substr(0, pos);
    }
    var date = new Date();
    obj.src = src + '?v=' + date.getTime();
    return false;
  };
  
})();
